{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 机器学习入门之线性回归\n",
    "你所在的公司在电视上做产品广告, 收集到了电视广告投入x(以百万为单位)与产品销售量y(以亿为单位)的数据. 你作为公司的数据科学家, 希望通过分析这些数据, 了解电视广告投入x(以百万为单位)与产品销售量y的关系. \n",
    "\n",
    "假设x与y的之间的关系是线性的, 也就是说 y = ax + b. 通过线性回归(Linear Regression), 我们就可以得知 a 和 b 的值. 于是我们在未来做规划的时候, 通过电视广告投入x, 就可以预测产品销售量y, 从而可以提前做好生产和物流, 仓储的规划. 为客户提供更好的服务.\n",
    "\n",
    "#课后练习#\n",
    "气温会随着海拔高度的升高而降低, 我们可以通过测量不同海拔高度的气温来预测海拔高度和气温的关系. \n",
    "我们假设海拔高度和气温的关系可以使用如下公式表达:\n",
    "y(气温) = a * x(海拔高度) + b \n",
    "理论上来讲, 确定以上公式 a 和 b的值只需在两个不同高度测试, 就可以算出来 a 和 b 的值了. 但是由于所有的设备都是有误差的, 而使用更多的高度测试的值可以使得预测的值更加准确. \n",
    "我们提供了在9个不同高度测量的气温值, 请你根据今天学习的线性回归方法预测 a 和 b 的值. 根据这个公式, 我们预测一下在8000米的海拔, 气温会是多少?\n",
    "数据文件请见demodata/height.vs.temperature.csv\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "from sklearn.linear_model import LinearRegression"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "data = pd.read_csv(\"demodata/height.vs.temperature.csv\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>height</th>\n",
       "      <th>temperature</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.0</td>\n",
       "      <td>12.834044</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>500.0</td>\n",
       "      <td>10.190649</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1000.0</td>\n",
       "      <td>5.500229</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1500.0</td>\n",
       "      <td>2.854665</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>2000.0</td>\n",
       "      <td>-0.706488</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   height  temperature\n",
       "0     0.0    12.834044\n",
       "1   500.0    10.190649\n",
       "2  1000.0     5.500229\n",
       "3  1500.0     2.854665\n",
       "4  2000.0    -0.706488"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Index(['height', 'temperature'], dtype='object')"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data.columns"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 通过数据可视化分析数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 1152x576 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize=(16, 8))\n",
    "plt.scatter(data['height'], data['temperature'], c ='black')\n",
    "plt.xlabel(\"temperature on height\")\n",
    "plt.ylabel(\"temperature\")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 训练线性回归模型"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "LinearRegression(copy_X=True, fit_intercept=True, n_jobs=None,\n",
       "         normalize=False)"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X = data['height'].values.reshape(-1,1)\n",
    "y = data['temperature'].values.reshape(-1,1)\n",
    "\n",
    "reg = LinearRegression()\n",
    "reg.fit(X, y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "a = -0.0065695\n",
      "b = 12.719\n",
      "线性模型为: Y = -0.0065695X + 12.719 \n"
     ]
    }
   ],
   "source": [
    "print('a = {:.5}'.format(reg.coef_[0][0]))\n",
    "print('b = {:.5}'.format(reg.intercept_[0]))\n",
    "\n",
    "print(\"线性模型为: Y = {:.5}X + {:.5} \".format(reg.coef_[0][0], reg.intercept_[0]))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 可视化训练好的线性回归模型"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 1152x576 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "predictions = reg.predict(X)\n",
    "\n",
    "plt.figure(figsize=(16, 8))\n",
    "plt.scatter(data['height'], data['temperature'], c ='black')\n",
    "plt.plot(data['height'], predictions,c ='blue', linewidth=2)\n",
    "plt.xlabel(\"temperature on height\")\n",
    "plt.ylabel(\"temperature\")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 做预测\n",
    "我们预测一下在8000米的海拔, 气温会是多少？"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "8000米的海拔, 气温是-39.838亿\n"
     ]
    }
   ],
   "source": [
    "predictions = reg.predict([[8000]])\n",
    "print('8000米的海拔, 气温是{:.5}摄氏度'.format( predictions[0][0]) )"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.1"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
